#include <my_head.h>

// 互斥锁一般定义在全局出 方便其他线程使用
pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; // 静态初始化的写法

int num = 0;

void *task_func_1(void *arg){
    for(int i = 0; i < 500000; i++){
        pthread_mutex_lock(&lock); // 加锁
        num++;
        pthread_mutex_unlock(&lock); // 解锁
    }
}

void *task_func_2(void *arg){
    for(int i = 0; i < 500000; i++){
        pthread_mutex_lock(&lock); // 加锁
        num++;
        pthread_mutex_unlock(&lock); // 解锁
    }
}

int main(int argc, const char *argv[]){
    // 初始化互斥锁
    // pthread_mutex_init(&lock, NULL); // 已经静态初始化了 就不需要再动态初始化了
    pthread_t tid1, tid2;
    int ret = 0;
    if(0 != (ret = pthread_create(&tid1, NULL, task_func_1, NULL))){
        printf("pthread_create error : [%d] [%s]\n", ret, strerror(ret));
        exit(EXIT_FAILURE);
    }
    if(0 != (ret = pthread_create(&tid2, NULL, task_func_2, NULL))){
        printf("pthread_create error : [%d] [%s]\n", ret, strerror(ret));
        exit(EXIT_FAILURE);
    }
    pthread_join(tid1, NULL);
    pthread_join(tid2, NULL);
    // 销毁互斥锁--一定要在所有线程都不使用时再销毁
    pthread_mutex_destroy(&lock);
    printf("num = %d\n", num); // 100万
    return 0;
}